基于 Racket 的 To-Do List 工具 RReminder
![[RReminder.excalidraw]]
需求背景
目前市面上的 To-Do List 工具的数据都是保存在云端的,违背了我对数据安全的一些准则。大多工具都是及其复杂,而我只是想要一个最简单的代办任务功能,作为一个极简主义者,完全不能忍受,所以打算基于 Racket 开发一个 To-Do List 工具。
技术选型
这个 To-Do List 工具打算全部采用 Racket 进行实现,这样可以很容易就达到跨平台的效果。其中 GUI 界面采用 racket/gui 库来实现,后端的数据使用 json 格式保存。如果想要多端同步的效果,通过第三方云盘同步后台的 json 数据即可。
界面布局
左侧菜单栏(侧边栏)
- 「今天」按钮(筛选功能):显示当天的待办事项。
- 「完成」按钮(筛选功能):显示已完成的事项。
- 「我的列表」部分:
- 展示多个任务列表,如「工作」「生活」。
- 允许选择不同的列表,切换查看任务内容。
- 需要提供 添加新列表 的功能(底部的「添加列表」按钮)。
任务展示区域
- 标题栏显示当前选中的任务列表(如 「工作」)。
- 每个任务项包含:
- 复选框(✔ 用于标记完成)。
- 任务文本描述(如「写一本 Racket 书籍」)。
- 任务截止日期(如 4月2日)。
- 任务之间有分割线,提升可读性。
底部操作
- 「+ 新提醒事项」 按钮:用于添加新的任务。
- 「添加列表」 按钮:用于创建新的任务分类。
控件列表
功能 | 控件 | 实现难度 |
---|---|---|
主窗口 | frame% | 低 |
侧边栏(任务列表) | list-box% 或 vertical-panel% | 低 |
任务列表区 | panel% + canvas% | 中 |
任务项 | check-box% + message% | 低 |
添加新任务 | button% + text-field% | 低 |
任务完成状态切换 | check-box% 事件回调 | 低 |
任务日期显示 | message% | 低 |
难点分析
- 界面布局
- racket/gui 使用面板(panel%)进行布局,需要合理组织 horizontal-panel% 和 vertical-panel%,以保持界面结构一致。
- 滚动条(vertical-panel%)需要确保任务较多时可以滚动。
- 任务数据存储
- 选择 JSON 或 SQLite 进行本地存储:JSON 适合小型数据,易读易改。SQLite 适合扩展,但需要额外的数据库操作。
- 交互逻辑
- 任务完成状态变化后,是否隐藏任务(如果在「今天」视图中)。
- 任务添加后 UI 需动态刷新。